﻿#pragma once
//定义了Card单张卡牌类

#ifndef CARD_H
#define CARD_H

#include <QVector>

// 定义单张卡牌类Card
// 成员变量是花色和点数
class Card
{
public:
    // 花色
    enum CardSuit
    {
        Suit_Begin,
        Diamond,        //方块
        Club,           //梅花
        Heart,          //红心
        Spade,          //黑桃
        Suit_End
    };
    // 点数
    enum CardPoint
    {
        Card_Begin,
        Card_A,
        Card_2,
        Card_3,
        Card_4,
        Card_5,
        Card_6,
        Card_7,
        Card_8,
        Card_9,
        Card_10,
        Card_J,
        Card_Q,
        Card_K,
        Card_SJ,    // 大王
        Card_BJ,    // 小王
        Card_End
    };

    // 默认构造函数，基本无用
    Card();

    //有参构造函数，参数是枚举类型的Point（点数）和枚举类型的suit（花色）
    Card(CardPoint point, CardSuit suit);

    //设置点数
    void setPoint(CardPoint point);

    //设置花色
    void setSuit(CardSuit suit);

    //获得当前卡牌的点数，get
    CardPoint point() const;

    //获得当前卡牌的花色
    CardSuit suit() const;

private:
    CardPoint m_point;  //当前卡牌对象的点数
    CardSuit m_suit;    //当前卡牌对象的花色
};

// 定义排序规则，从小到大
bool lessSort(const Card& c1, const Card& c2);

// 定义排序规则，从大到小
bool greaterSort(const Card& c1, const Card& c2);

// 重载比较运算符 < 
bool operator <(const Card& c1, const Card& c2);

//重载比较运算符 == ，花色和点数都相等才返回true
bool operator ==(const Card& left, const Card& right);


// 确保 唯一 对 唯一 输出
uint qHash(const Card& card);

//重命名QVector<Card>，相当于typedef，可以使代码简单
using CardList = QVector<Card>;

#endif // CARD_H
